package com.shujia.day12;

import com.sun.org.apache.xerces.internal.impl.io.UTF8Reader;
import sun.nio.cs.ext.GBK;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.CharsetDecoder;

public class Demo06IOReadCode {
    public static void main(String[] args) throws IOException {
        /*
            ASCII：美国标准信息交换码。
                用一个字节的7位可以表示。
            ISO8859-1：拉丁码表。欧洲码表
                用一个字节的8位表示。
                GB2312：中国的中文编码表。
                GBK：中国的中文编码表升级，融合了更多的中文文字符号。
                GB18030：GBK的取代版本
                BIG-5码 ：通行于台湾、香港地区的一个繁体字编码方案，俗称“大五码”。
            Unicode：国际标准码，融合了多种文字。
            所有文字都用两个字节来表示,Java语言使用的就是unicode
                UTF-8：最多用三个字节来表示一个字符。

                UTF-8不同，它定义了一种“区间规则”，这种规则可以和ASCII编码保持最大程度的兼容：
                它将Unicode编码为00000000-0000007F的字符，用单个字节来表示
                它将Unicode编码为00000080-000007FF的字符用两个字节表示
                它将Unicode编码为00000800-0000FFFF的字符用3字节表示

         */

        /*
            TODO 字符编码乱码问题
                ① 对于IDEA中的Java默认使用UTF-8编码
                ② 当读取GBK编码文件时，窗口打印会乱码
                ③ 读写文件之前，需要确定当前的文件格式是什么
         */
        String path = "data/data_gbk.txt";
//        InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(path),"GBK");
        InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(path),new GBK());
        char[] chars = new char[10];
        int readLen = 0;
        while ((readLen = inputStreamReader.read(chars)) > 0){
            String oneStr = new String(chars,0,readLen);
            System.out.print(oneStr);
        }
        inputStreamReader.close();
    }
}
